নিচে Unix Domain Socket ব্যবহার করে একটি সার্ভার এবং ক্লায়েন্ট প্রোগ্রাম উদাহরণ দেওয়া হলো, যা প্রক্রিয়াগুলোর মধ্যে লোকালি (একই সিস্টেমে) যোগাযোগ করতে সহায়ক। এই উদাহরণে C ভাষা ব্যবহার করা হয়েছে, এবং এটি একটি Stream Socket (SOCK_STREAM) প্রোটোকল ব্যবহার করে TCP-এর মতো ধারাবাহিক (reliable) সংযোগ তৈরি করবে।
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCKET_PATH "/tmp/uds_socket"
int main() {
int server_fd, client_fd;
struct sockaddr_un server_addr, client_addr;
socklen_t client_len;
char buffer[100];
// 1. Socket তৈরি করা
if ((server_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 2. ঠিকানা সেটআপ করা
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sun_family = AF_UNIX;
strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);
// 3. Binding করা
unlink(SOCKET_PATH); // যদি আগে থেকে কোনো ফাইল থাকে, তা মুছে ফেলা
if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Bind failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// 4. Listening করা
if (listen(server_fd, 5) < 0) {
perror("Listen failed");
close(server_fd);
exit(EXIT_FAILURE);
}
printf("Server is listening...\n");
client_len = sizeof(client_addr);
// 5. Accepting সংযোগ
if ((client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len)) < 0) {
perror("Accept failed");
close(server_fd);
exit(EXIT_FAILURE);
}
// 6. ডেটা গ্রহণ করা
int n = read(client_fd, buffer, sizeof(buffer));
buffer[n] = '\0';
printf("Client: %s\n", buffer);
// 7. ডেটা পাঠানো
write(client_fd, "Hello from server", 17);
// 8. Socket বন্ধ করা
close(client_fd);
close(server_fd);
unlink(SOCKET_PATH); // Socket ফাইল মুছে ফেলা
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#define SOCKET_PATH "/tmp/uds_socket"
int main() {
int client_fd;
struct sockaddr_un server_addr;
char buffer[100];
// 1. Socket তৈরি করা
if ((client_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
// 2. সার্ভার ঠিকানা সেটআপ করা
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sun_family = AF_UNIX;
strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);
// 3. সার্ভারের সাথে সংযোগ স্থাপন করা
if (connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
perror("Connection failed");
close(client_fd);
exit(EXIT_FAILURE);
}
// 4. ডেটা পাঠানো
char *message = "Hello from client";
write(client_fd, message, strlen(message));
// 5. ডেটা গ্রহণ করা
int n = read(client_fd, buffer, sizeof(buffer));
buffer[n] = '\0';
printf("Server: %s\n", buffer);
// 6. Socket বন্ধ করা
close(client_fd);
return 0;
}
socket()
ফাংশন ব্যবহার করে AF_UNIX এবং SOCK_STREAM দিয়ে একটি Unix Domain Socket তৈরি করা হয়।bind()
ফাংশন ব্যবহার করে Socket-কে একটি নির্দিষ্ট পাথ (/tmp/uds_socket
) এ সংযুক্ত করা হয়।listen()
ফাংশন ইনকামিং সংযোগের জন্য সার্ভারকে অপেক্ষা করায়।accept()
ফাংশন ব্যবহার করে একটি ইনকামিং সংযোগ গ্রহণ করা হয়।read()
ফাংশন ক্লায়েন্ট থেকে ডেটা গ্রহণ করে।write()
ফাংশন ব্যবহার করে সার্ভার ক্লায়েন্টে ডেটা পাঠায়।close()
এবং unlink()
ফাংশন ব্যবহার করে Socket বন্ধ এবং মুছে ফেলা হয়।socket()
ফাংশন AF_UNIX এবং SOCK_STREAM দিয়ে ক্লায়েন্টের জন্য একটি Socket তৈরি করে।server_addr.sun_path
-এ সেট করা হয়।connect()
ফাংশন সার্ভারের সাথে সংযোগ স্থাপন করে।write()
ফাংশন ব্যবহার করে ক্লায়েন্ট একটি বার্তা পাঠায়।read()
ফাংশন ব্যবহার করে সার্ভার থেকে ডেটা গ্রহণ করে।close()
ফাংশন ব্যবহার করে Socket বন্ধ করা হয়।প্রথমে সার্ভার প্রোগ্রাম চালু করুন:
/tmp/uds_socket
পাথে একটি Unix Domain Socket তৈরি করে এবং ইনকামিং সংযোগের জন্য অপেক্ষা করবে।এরপর ক্লায়েন্ট প্রোগ্রাম চালু করুন:
ক্লায়েন্ট এবং সার্ভারের মধ্যে বার্তা আদান-প্রদান:
common.read_more